// 系统监控和性能测试
describe('系统监控和性能', () => {
  beforeEach(() => {
    cy.login();
  });

  it('应该能够访问监控仪表板', () => {
    // 访问监控仪表板
    cy.visit('/dashboard');
    cy.waitForLoading();
    
    // 验证仪表板显示
    cy.shouldHavePageTitle('系统监控仪表板');
    
    // 验证关键指标显示
    cy.get('[data-cy="system-health"]').should('be.visible');
    cy.get('[data-cy="active-agents"]').should('be.visible');
    cy.get('[data-cy="total-conversations"]').should('be.visible');
    cy.get('[data-cy="system-load"]').should('be.visible');
    
    // 验证图表显示
    cy.get('[data-cy="performance-chart"]').should('be.visible');
    cy.get('[data-cy="usage-chart"]').should('be.visible');
    cy.get('[data-cy="error-rate-chart"]').should('be.visible');
  });

  it('应该能够查看实时性能指标', () => {
    // 访问性能监控页面
    cy.visit('/monitoring/performance');
    cy.waitForLoading();
    
    // 验证性能指标显示
    cy.get('[data-cy="cpu-usage"]').should('be.visible');
    cy.get('[data-cy="memory-usage"]').should('be.visible');
    cy.get('[data-cy="disk-usage"]').should('be.visible');
    cy.get('[data-cy="network-usage"]').should('be.visible');
    
    // 验证实时更新
    cy.get('[data-cy="last-update"]').should('be.visible');
    
    // 验证性能图表
    cy.get('[data-cy="cpu-chart"]').should('be.visible');
    cy.get('[data-cy="memory-chart"]').should('be.visible');
    cy.get('[data-cy="network-chart"]').should('be.visible');
  });

  it('应该能够查看错误日志', () => {
    // 访问错误日志页面
    cy.visit('/monitoring/logs');
    cy.waitForLoading();
    
    // 验证日志列表显示
    cy.get('[data-cy="log-list"]').should('be.visible');
    
    // 验证日志筛选功能
    cy.get('[data-cy="log-level-filter"]').should('be.visible');
    cy.get('[data-cy="log-search"]').should('be.visible');
    
    // 筛选错误日志
    cy.get('[data-cy="log-level-filter"]').select('ERROR');
    cy.get('[data-cy="apply-filter"]').click();
    
    // 验证筛选结果
    cy.get('[data-cy="log-list"]').should('be.visible');
  });

  it('应该能够管理系统告警', () => {
    // 访问告警管理页面
    cy.visit('/monitoring/alerts');
    cy.waitForLoading();
    
    // 验证告警列表显示
    cy.get('[data-cy="alert-list"]').should('be.visible');
    
    // 验证告警状态
    cy.get('[data-cy="alert-status"]').should('be.visible');
    cy.get('[data-cy="alert-severity"]').should('be.visible');
    
    // 处理告警
    cy.get('[data-cy="alert-checkbox"]').first().check();
    cy.get('[data-cy="acknowledge-alerts"]').click();
    
    // 验证告警处理成功
    cy.shouldHaveSuccessMessage('告警确认成功');
  });

  it('应该能够配置监控系统', () => {
    // 访问监控配置页面
    cy.visit('/monitoring/settings');
    cy.waitForLoading();
    
    // 验证配置页面显示
    cy.get('[data-cy="monitoring-config"]').should('be.visible');
    
    // 配置监控参数
    cy.fillForm({
      'collectionInterval': 30,
      'retentionPeriod': 7,
      'alertThresholds': {
        'cpu': 80,
        'memory': 85,
        'disk': 90,
      },
      'notificationSettings': {
        'email': true,
        'webhook': true,
      },
    });
    
    // 保存配置
    cy.get('[data-cy="save-config"]').click();
    
    // 验证配置保存成功
    cy.shouldHaveSuccessMessage('监控配置保存成功');
  });

  it('应该能够生成性能报告', () => {
    // 访问性能报告页面
    cy.visit('/monitoring/reports');
    cy.waitForLoading();
    
    // 验证报告页面显示
    cy.get('[data-cy="report-generator"]').should('be.visible');
    
    // 设置报告参数
    cy.fillForm({
      'reportType': 'performance',
      'dateRange': '2024-01-01,2024-01-31',
      'includeCharts': true,
      'format': 'pdf',
    });
    
    // 生成报告
    cy.get('[data-cy="generate-report"]').click();
    
    // 验证报告生成成功
    cy.shouldHaveSuccessMessage('性能报告生成成功');
    
    // 下载报告
    cy.get('[data-cy="download-report"]').click();
    cy.readFile('cypress/downloads/performance-report.pdf').should('exist');
  });

  it('应该能够进行性能测试', () => {
    // 访问性能测试页面
    cy.visit('/monitoring/load-test');
    cy.waitForLoading();
    
    // 验证测试配置页面显示
    cy.get('[data-cy="load-test-config"]').should('be.visible');
    
    // 配置测试参数
    cy.fillForm({
      'concurrentUsers': 100,
      'duration': 300,
      'rampUp': 60,
      'testScenario': 'normal',
    });
    
    // 开始测试
    cy.get('[data-cy="start-test"]').click();
    
    // 验证测试开始
    cy.shouldHaveSuccessMessage('性能测试已开始');
    
    // 等待测试完成
    cy.get('[data-cy="test-progress"]').should('be.visible');
    cy.get('[data-cy="test-status"]').should('contain', '运行中');
    
    // 验证测试结果
    cy.get('[data-cy="test-results"]').should('be.visible');
    cy.get('[data-cy="performance-metrics"]').should('be.visible');
  });

  it('应该能够监控系统健康状态', () => {
    // 访问健康检查页面
    cy.visit('/monitoring/health');
    cy.waitForLoading();
    
    // 验证健康状态显示
    cy.get('[data-cy="health-status"]').should('be.visible');
    
    // 验证各个组件状态
    cy.get('[data-cy="database-status"]').should('be.visible');
    cy.get('[data-cy="cache-status"]').should('be.visible');
    cy.get('[data-cy="external-services-status"]').should('be.visible');
    
    // 执行健康检查
    cy.get('[data-cy="run-health-check"]').click();
    
    // 验证检查结果
    cy.get('[data-cy="health-check-results"]').should('be.visible');
  });

  it('应该能够查看资源使用情况', () => {
    // 访问资源监控页面
    cy.visit('/monitoring/resources');
    cy.waitForLoading();
    
    // 验证资源使用显示
    cy.get('[data-cy="resource-usage"]').should('be.visible');
    
    // 验证资源分配
    cy.get('[data-cy="cpu-allocation"]').should('be.visible');
    cy.get('[data-cy="memory-allocation"]').should('be.visible');
    cy.get('[data-cy="disk-allocation"]').should('be.visible');
    
    // 验证资源趋势图表
    cy.get('[data-cy="resource-trends"]').should('be.visible');
  });

  it('应该能够管理系统备份', () => {
    // 访问备份管理页面
    cy.visit('/monitoring/backup');
    cy.waitForLoading();
    
    // 验证备份列表显示
    cy.get('[data-cy="backup-list"]').should('be.visible');
    
    // 创建新备份
    cy.get('[data-cy="create-backup"]').click();
    cy.confirmModal();
    
    // 验证备份创建成功
    cy.shouldHaveSuccessMessage('备份创建成功');
    
    // 恢复备份
    cy.get('[data-cy="restore-backup"]').first().click();
    cy.confirmModal();
    
    // 验证恢复确认
    cy.shouldHaveSuccessMessage('备份恢复成功');
  });

  it('应该能够查看审计日志', () => {
    // 访问审计日志页面
    cy.visit('/monitoring/audit');
    cy.waitForLoading();
    
    // 验证审计日志显示
    cy.get('[data-cy="audit-log"]').should('be.visible');
    
    // 验证日志筛选
    cy.get('[data-cy="audit-filter"]').should('be.visible');
    
    // 筛选用户操作
    cy.fillForm({
      'user': 'admin@example.com',
      'action': 'login',
      'dateRange': '2024-01-01,2024-01-31',
    });
    cy.get('[data-cy="apply-filter"]').click();
    
    // 验证筛选结果
    cy.get('[data-cy="audit-log"]').should('be.visible');
  });

  it('应该能够进行系统诊断', () => {
    // 访问系统诊断页面
    cy.visit('/monitoring/diagnostics');
    cy.waitForLoading();
    
    // 验证诊断页面显示
    cy.get('[data-cy="diagnostic-tools"]').should('be.visible');
    
    // 运行诊断
    cy.get('[data-cy="run-diagnostics"]').click();
    
    // 验证诊断进行中
    cy.get('[data-cy="diagnostic-progress"]').should('be.visible');
    
    // 验证诊断结果
    cy.get('[data-cy="diagnostic-results"]').should('be.visible');
    cy.get('[data-cy="system-issues"]').should('be.visible');
    cy.get('[data-cy="recommendations"]').should('be.visible');
  });

  it('应该能够监控系统API', () => {
    // 访问API监控页面
    cy.visit('/monitoring/api');
    cy.waitForLoading();
    
    // 验证API监控显示
    cy.get('[data-cy="api-metrics"]').should('be.visible');
    
    // 验证API性能指标
    cy.get('[data-cy="response-time"]').should('be.visible');
    cy.get('[data-cy="throughput"]').should('be.visible');
    cy.get('[data-cy="error-rate"]').should('be.visible');
    
    // 验证API调用图表
    cy.get('[data-cy="api-calls-chart"]').should('be.visible');
    cy.get('[data-cy="api-response-time-chart"]').should('be.visible');
  });

  it('应该能够处理系统告警', () => {
    // 模拟系统告警
    cy.intercept('GET', '/api/monitoring/alerts', {
      statusCode: 200,
      body: {
        alerts: [
          {
            id: 'alert-1',
            type: 'high_cpu',
            severity: 'high',
            message: 'CPU使用率过高',
            timestamp: '2024-01-15T10:00:00Z',
          },
        ],
      },
    }).as('getAlerts');
    
    // 访问告警页面
    cy.visit('/monitoring/alerts');
    cy.waitForApiResponse('@getAlerts');
    
    // 验证告警显示
    cy.get('[data-cy="alert-item"]').should('be.visible');
    cy.get('[data-cy="alert-message"]').should('contain', 'CPU使用率过高');
    
    // 处理告警
    cy.get('[data-cy="resolve-alert"]').click();
    cy.get('[data-cy="resolution-note"]').type('已优化系统配置');
    cy.get('[data-cy="submit-resolution"]').click();
    
    // 验证告警解决成功
    cy.shouldHaveSuccessMessage('告警已解决');
  });
});